{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "RDKit WARNING: [16:13:50] Enabling RDKit 2019.09.1 jupyter extensions\n"
     ]
    }
   ],
   "source": [
    "from torch_geometric.data import DataLoader\n",
    "import torch.distributions as D\n",
    "import matplotlib.pyplot as plt\n",
    "from rdkit import Chem, DataStructs\n",
    "from rdkit.Chem import AllChem, Draw, Descriptors, rdMolTransforms\n",
    "from rdkit import rdBase\n",
    "import glob\n",
    "import os\n",
    "\n",
    "from deepdock.utils.distributions import *\n",
    "from deepdock.utils.data import *\n",
    "from deepdock.models import *\n",
    "\n",
    "from deepdock.DockingFunction import optimze_conformation\n",
    "from scipy.optimize import basinhopping, brute, differential_evolution\n",
    "import copy\n",
    "\n",
    "# set the random seeds for reproducibility\n",
    "np.random.seed(123)\n",
    "torch.cuda.manual_seed_all(123)\n",
    "torch.manual_seed(123)\n",
    "\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Complexes in CASF2016 Core Set: 285\n",
      "CPU times: user 141 ms, sys: 42.4 ms, total: 183 ms\n",
      "Wall time: 185 ms\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "db_complex = PDBbind_complex_dataset(data_path='../data/dataset_CASF-2016_285.tar', \n",
    "                                     min_target_nodes=None, max_ligand_nodes=None)\n",
    "print('Complexes in CASF2016 Core Set:', len(db_complex))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<All keys matched successfully>"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#device = 'cuda' if torch.cuda.is_available() else 'cpu'\n",
    "device = 'cpu'\n",
    "\n",
    "ligand_model = LigandNet(28, residual_layers=10, dropout_rate=0.10)\n",
    "target_model = TargetNet(4, residual_layers=10, dropout_rate=0.10)\n",
    "model = DeepDock(ligand_model, target_model, hidden_dim=64, n_gaussians=10, dropout_rate=0.10, dist_threhold=7.).to(device)\n",
    "\n",
    "checkpoint = torch.load('../Trained_models/DeepDock_pdbbindv2019_13K_minTestLoss.chk')\n",
    "model.load_state_dict(checkpoint['model_state_dict']) "
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {},
   "source": [
    "    data = next(iter(loader))\n",
    "    dist_threshold=3.\n",
    "    popsize=150\n",
    "    np.random.seed(123)\n",
    "    torch.cuda.manual_seed_all(123)\n",
    "    torch.manual_seed(123)\n",
    "    \n",
    "    model.eval()\n",
    "    ligand, target, activity, pdbid = data\n",
    "    ligand, target = ligand.to(device), target.to(device)\n",
    "    pi, sigma, mu, dist, atom_types, bond_types, batch = model(ligand, target)\n",
    "    \n",
    "    pdb_id = pdbid[0]\n",
    "    real_mol = Chem.MolFromMol2File('../../DeepDock/data/CASF-2016/coreset/' + pdb_id + '/' + pdb_id +'_ligand.mol2',\n",
    "                                    sanitize=False, cleanupSubstructures=False, removeHs=False)\n",
    "    opt = optimze_conformation(mol=real_mol, target_coords=target.pos.cpu(), n_particles=1, \n",
    "                               pi=pi.cpu(), mu=mu.cpu(), sigma=sigma.cpu(), dist_threshold=dist_threshold)\n",
    "    \n",
    "    #Define bounds\n",
    "    max_bound = np.concatenate([[np.pi]*3, target.pos.cpu().max(0)[0].numpy(), [np.pi]*len(opt.rotable_bonds)], axis=0)\n",
    "    min_bound = np.concatenate([[-np.pi]*3, target.pos.cpu().min(0)[0].numpy(), [-np.pi]*len(opt.rotable_bonds)], axis=0)\n",
    "    bounds = (min_bound, max_bound)\n",
    "    \n",
    "    # Optimize conformations\n",
    "    result = differential_evolution(opt.score_conformation, list(zip(bounds[0],bounds[1])), maxiter=500, \n",
    "                                    popsize=int(np.ceil(popsize/(len(opt.rotable_bonds)+6))), \n",
    "                                    mutation=(0.5, 1), recombination=0.8, disp=False, seed=123)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "def dock_compound(data, dist_threshold=3., popsize=150):\n",
    "    np.random.seed(123)\n",
    "    torch.cuda.manual_seed_all(123)\n",
    "    torch.manual_seed(123)\n",
    "    \n",
    "    model.eval()\n",
    "    ligand, target, activity, pdbid = data\n",
    "    ligand, target = ligand.to(device), target.to(device)\n",
    "    pi, sigma, mu, dist, atom_types, bond_types, batch = model(ligand, target)\n",
    "    \n",
    "    pdb_id = pdbid[0]\n",
    "    real_mol = Chem.MolFromMol2File('../../DeepDock/data/CASF-2016/coreset/' + pdb_id + '/' + pdb_id +'_ligand.mol2',\n",
    "                                    sanitize=False, cleanupSubstructures=False, removeHs=False)\n",
    "    opt = optimze_conformation(mol=real_mol, target_coords=target.pos.cpu(), n_particles=1, \n",
    "                               pi=pi.cpu(), mu=mu.cpu(), sigma=sigma.cpu(), dist_threshold=dist_threshold)\n",
    "    \n",
    "    #Define bounds\n",
    "    max_bound = np.concatenate([[np.pi]*3, target.pos.cpu().max(0)[0].numpy(), [np.pi]*len(opt.rotable_bonds)], axis=0)\n",
    "    min_bound = np.concatenate([[-np.pi]*3, target.pos.cpu().min(0)[0].numpy(), [-np.pi]*len(opt.rotable_bonds)], axis=0)\n",
    "    bounds = (min_bound, max_bound)\n",
    "    \n",
    "    # Optimize conformations\n",
    "    result = differential_evolution(opt.score_conformation, list(zip(bounds[0],bounds[1])), maxiter=500, \n",
    "                                    popsize=int(np.ceil(popsize/(len(opt.rotable_bonds)+6))),\n",
    "                                    mutation=(0.5, 1), recombination=0.8, disp=False, seed=123)\n",
    "    \n",
    "    # Get optimized molecule and RMSD\n",
    "    opt_mol = opt.apply_changes(opt.mol, result['x'])\n",
    "    ligCoords = torch.stack([torch.tensor(m.GetConformer().GetPositions()[opt.noHidx]) for m in [opt_mol]])\n",
    "    dist = opt.compute_euclidean_distances_matrix(ligCoords, opt.targetCoords).flatten().unsqueeze(1)\n",
    "    result['num_MixOfGauss'] = torch.where(dist <= dist_threshold)[0].size(0)\n",
    "    result['rmsd'] = Chem.rdMolAlign.AlignMol(opt_mol, real_mol, atomMap=list(zip(opt.noHidx,opt.noHidx)))\n",
    "    result['pdb_id'] = pdb_id\n",
    "    \n",
    "    # Get score of real conformation\n",
    "    ligCoords = torch.stack([torch.tensor(m.GetConformer().GetPositions()[opt.noHidx]) for m in [real_mol]])\n",
    "    dist = opt.compute_euclidean_distances_matrix(ligCoords, opt.targetCoords).flatten().unsqueeze(1)\n",
    "    score_real_mol = opt.calculate_probablity(opt.pi, opt.sigma, opt.mu, dist)\n",
    "    score_real_mol[torch.where(dist > dist_threshold)[0]] = 0.\n",
    "    result['score_real_mol'] = pdb_id = score_real_mol.reshape(opt.n_particles, -1).sum(1).item()\n",
    "    del ligCoords, dist, score_real_mol\n",
    "    \n",
    "    result['pkx'] = data[2][0].item()\n",
    "    result['num_atoms'] = real_mol.GetNumHeavyAtoms()\n",
    "    result['num_rotbonds'] = len(opt.rotable_bonds)\n",
    "    result['rotbonds'] = opt.rotable_bonds\n",
    "    #result['num_MixOfGauss'] = mu.size(0)\n",
    "    \n",
    "    return result"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 1d 12h 54min 3s, sys: 46min 14s, total: 1d 13h 40min 18s\n",
      "Wall time: 9h 59min 55s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "loader = DataLoader(db_complex, batch_size=1, shuffle=False)\n",
    "\n",
    "results = []\n",
    "i = 0\n",
    "for data in loader:\n",
    "    try:\n",
    "        results.append(dock_compound(data))\n",
    "        d = {}\n",
    "        for k in results[0].keys():\n",
    "            if k != 'jac':\n",
    "                d[k] = tuple(d[k] for d in results)\n",
    "        torch.save(d, 'DockingResults_CASF2016_CoreSet.chk')\n",
    "        results_df = pd.DataFrame.from_dict(d)\n",
    "        results_df.to_csv('DockingResults_CASF2016_CoreSet.csv', index=False) \n",
    "        i += 1\n",
    "    except:\n",
    "        print(i, data[3])\n",
    "        #break\n",
    "        i += 1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>x</th>\n",
       "      <th>fun</th>\n",
       "      <th>nfev</th>\n",
       "      <th>nit</th>\n",
       "      <th>message</th>\n",
       "      <th>success</th>\n",
       "      <th>num_MixOfGauss</th>\n",
       "      <th>rmsd</th>\n",
       "      <th>pdb_id</th>\n",
       "      <th>score_real_mol</th>\n",
       "      <th>pkx</th>\n",
       "      <th>num_atoms</th>\n",
       "      <th>num_rotbonds</th>\n",
       "      <th>rotbonds</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>0</td>\n",
       "      <td>[1.5063067262725696, 0.2133704428551216, 1.508...</td>\n",
       "      <td>[-70.16544231921738]</td>\n",
       "      <td>38392</td>\n",
       "      <td>237</td>\n",
       "      <td>Optimization terminated successfully.</td>\n",
       "      <td>True</td>\n",
       "      <td>409</td>\n",
       "      <td>2.099727</td>\n",
       "      <td>4k18</td>\n",
       "      <td>64.253744</td>\n",
       "      <td>NaN</td>\n",
       "      <td>29</td>\n",
       "      <td>5</td>\n",
       "      <td>[(7, 6, 5, 0), (8, 7, 6, 5), (11, 13, 16, 17),...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1</td>\n",
       "      <td>[-3.131853024748477, -0.7319495938580236, 3.08...</td>\n",
       "      <td>[-97.24881673780266]</td>\n",
       "      <td>15747</td>\n",
       "      <td>98</td>\n",
       "      <td>Optimization terminated successfully.</td>\n",
       "      <td>True</td>\n",
       "      <td>375</td>\n",
       "      <td>1.293288</td>\n",
       "      <td>4qac</td>\n",
       "      <td>83.284421</td>\n",
       "      <td>NaN</td>\n",
       "      <td>24</td>\n",
       "      <td>3</td>\n",
       "      <td>[(8, 7, 6, 0), (15, 14, 13, 8), (16, 17, 18, 19)]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2</td>\n",
       "      <td>[-2.837375698413872, 1.920415677247661, -2.234...</td>\n",
       "      <td>[-168.15472849991892]</td>\n",
       "      <td>22725</td>\n",
       "      <td>144</td>\n",
       "      <td>Optimization terminated successfully.</td>\n",
       "      <td>True</td>\n",
       "      <td>262</td>\n",
       "      <td>1.463300</td>\n",
       "      <td>1o3f</td>\n",
       "      <td>187.713267</td>\n",
       "      <td>NaN</td>\n",
       "      <td>25</td>\n",
       "      <td>3</td>\n",
       "      <td>[(1, 0, 6, 7), (13, 12, 11, 9), (20, 19, 16, 15)]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>3</td>\n",
       "      <td>[1.7394099202246427, -2.889091892409308, 0.394...</td>\n",
       "      <td>[-46.61066364180717]</td>\n",
       "      <td>13594</td>\n",
       "      <td>85</td>\n",
       "      <td>Optimization terminated successfully.</td>\n",
       "      <td>True</td>\n",
       "      <td>234</td>\n",
       "      <td>1.207122</td>\n",
       "      <td>4ih7</td>\n",
       "      <td>35.630420</td>\n",
       "      <td>NaN</td>\n",
       "      <td>17</td>\n",
       "      <td>2</td>\n",
       "      <td>[(8, 7, 6, 1), (10, 12, 13, 14)]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>[0.2800270507037714, -1.9041352450017086, 1.38...</td>\n",
       "      <td>[-63.59384324866685]</td>\n",
       "      <td>7992</td>\n",
       "      <td>45</td>\n",
       "      <td>Optimization terminated successfully.</td>\n",
       "      <td>True</td>\n",
       "      <td>165</td>\n",
       "      <td>0.000204</td>\n",
       "      <td>3dx1</td>\n",
       "      <td>49.944775</td>\n",
       "      <td>NaN</td>\n",
       "      <td>9</td>\n",
       "      <td>0</td>\n",
       "      <td>[]</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                   x                    fun  \\\n",
       "0  [1.5063067262725696, 0.2133704428551216, 1.508...   [-70.16544231921738]   \n",
       "1  [-3.131853024748477, -0.7319495938580236, 3.08...   [-97.24881673780266]   \n",
       "2  [-2.837375698413872, 1.920415677247661, -2.234...  [-168.15472849991892]   \n",
       "3  [1.7394099202246427, -2.889091892409308, 0.394...   [-46.61066364180717]   \n",
       "4  [0.2800270507037714, -1.9041352450017086, 1.38...   [-63.59384324866685]   \n",
       "\n",
       "    nfev  nit                                message  success  num_MixOfGauss  \\\n",
       "0  38392  237  Optimization terminated successfully.     True             409   \n",
       "1  15747   98  Optimization terminated successfully.     True             375   \n",
       "2  22725  144  Optimization terminated successfully.     True             262   \n",
       "3  13594   85  Optimization terminated successfully.     True             234   \n",
       "4   7992   45  Optimization terminated successfully.     True             165   \n",
       "\n",
       "       rmsd pdb_id  score_real_mol  pkx  num_atoms  num_rotbonds  \\\n",
       "0  2.099727   4k18       64.253744  NaN         29             5   \n",
       "1  1.293288   4qac       83.284421  NaN         24             3   \n",
       "2  1.463300   1o3f      187.713267  NaN         25             3   \n",
       "3  1.207122   4ih7       35.630420  NaN         17             2   \n",
       "4  0.000204   3dx1       49.944775  NaN          9             0   \n",
       "\n",
       "                                            rotbonds  \n",
       "0  [(7, 6, 5, 0), (8, 7, 6, 5), (11, 13, 16, 17),...  \n",
       "1  [(8, 7, 6, 0), (15, 14, 13, 8), (16, 17, 18, 19)]  \n",
       "2  [(1, 0, 6, 7), (13, 12, 11, 9), (20, 19, 16, 15)]  \n",
       "3                   [(8, 7, 6, 1), (10, 12, 13, 14)]  \n",
       "4                                                 []  "
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\n",
    "\n",
    "\n",
    "\n",
    "[if isinstance(r, list): -r[0] else -r for r in results_df.fun]\n",
    "\n",
    "results_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([78., 49., 28., 20., 15.,  7., 12.,  8.,  4.,  4.]),\n",
       " array([ 28. ,  74.8, 121.6, 168.4, 215.2, 262. , 308.8, 355.6, 402.4,\n",
       "        449.2, 496. ]),\n",
       " <a list of 10 Patch objects>)"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.hist(results_df['nit'][results_df.success == True])\n",
    "#plt.hist(results_df['nit'][results_df.success == False])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([34., 27., 53., 43., 39., 13.,  2.,  7.,  3.,  4.]),\n",
       " array([6.74349576e-07, 4.56029868e-01, 9.12059061e-01, 1.36808825e+00,\n",
       "        1.82411745e+00, 2.28014664e+00, 2.73617584e+00, 3.19220503e+00,\n",
       "        3.64823422e+00, 4.10426342e+00, 4.56029261e+00]),\n",
       " <a list of 10 Patch objects>)"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.hist(results_df['rmsd'][results_df.success == False])\n",
    "plt.hist(results_df['rmsd'][results_df.success == True])\n",
    "#plt.hist(results_df['rmsd'][results_df.success == False])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Mean RMSD of all compounds: 1.8683920926018736\n",
      "Mean RMSD of compounds with succesful optimization: 1.4235487671127272\n"
     ]
    }
   ],
   "source": [
    "print('Mean RMSD of all compounds:', results_df.rmsd.mean())\n",
    "print('Mean RMSD of compounds with succesful optimization:', results_df[results_df.success == True].rmsd.mean())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x7f324da89320>"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYYAAAD8CAYAAABzTgP2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAADqFJREFUeJzt23+o3fV9x/Hnq7k0axE00WitMbu2CiNu0MJBKdvA1V9x0EZa/7D7o2FryR+rf6yl0BTHtOof6tZZSruN0BZCYdXOURqQItFWGGNYT6yjzdo0t7HFpLZNjQhOqmR974/7dTufy4k3ud9z78nR5wMO93y/38+99/3xgs97zvcmVYUkSa9607QHkCSdWQyDJKlhGCRJDcMgSWoYBklSwzBIkhqGQZLUMAySpIZhkCQ15qY9wEqcd955NT8/P+0xJGmm7N+//9dVtWm5dTMZhvn5eYbD4bTHkKSZkuRnp7LOt5IkSQ3DIElqGAZJUsMwSJIahkGS1DAMkqSGYZAkNQyDJKlhGCRJDcMgSWoYBklSwzBIkhqGQZLUMAySpIZhkCQ1DIMkqWEYJEkNwyBJahgGSVLDMEiSGoZBktQwDJKkhmGQJDUMgySpMZEwJNmW5GCShSS7xlxfn+SB7vrjSeaXXN+S5MUkn5zEPJKklesdhiTrgC8CNwBbgQ8l2bpk2UeA56vqUuA+4J4l1/8e+FbfWSRJ/U3iFcMVwEJVHa6qV4D7ge1L1mwH9nTPHwSuThKAJDcCTwMHJjCLJKmnSYThIuCZkeMj3bmxa6rqBPACcG6Ss4BPAZ+ZwBySpAmY9s3n24H7qurF5RYm2ZlkmGR47Nix1Z9Mkt6g5ibwNY4CF48cb+7OjVtzJMkccDbwHHAlcFOSe4FzgN8m+U1VfWHpN6mq3cBugMFgUBOYW5I0xiTC8ARwWZJLWAzAzcCfLVmzF9gB/AdwE/Dtqirgj19dkOR24MVxUZAkrZ3eYaiqE0luAR4G1gFfqaoDSe4AhlW1F/gy8NUkC8BxFuMhSToDZfEX99kyGAxqOBxOewxJmilJ9lfVYLl10775LEk6wxgGSVLDMEiSGoZBktQwDJKkhmGQJDUMgySpYRgkSQ3DIElqGAZJUsMwSJIahkGS1DAMkqSGYZAkNQyDJKlhGCRJDcMgSWoYBklSwzBIkhqGQZLUMAySpIZhkCQ1DIMkqWEYJEkNwyBJahgGSVLDMEiSGoZBktQwDJKkhmGQJDUMgySpMZEwJNmW5GCShSS7xlxfn+SB7vrjSea789cm2Z/k+93H905iHknSyvUOQ5J1wBeBG4CtwIeSbF2y7CPA81V1KXAfcE93/tfA+6rqD4AdwFf7ziNJ6mcSrxiuABaq6nBVvQLcD2xfsmY7sKd7/iBwdZJU1feq6ufd+QPAW5Ksn8BMkqQVmkQYLgKeGTk+0p0bu6aqTgAvAOcuWfNB4MmqenkCM0mSVmhu2gMAJLmcxbeXrnuNNTuBnQBbtmxZo8kk6Y1nEq8YjgIXjxxv7s6NXZNkDjgbeK473gx8A/hwVf3kZN+kqnZX1aCqBps2bZrA2JKkcSYRhieAy5JckuTNwM3A3iVr9rJ4cxngJuDbVVVJzgEeAnZV1b9PYBZJUk+9w9DdM7gFeBj4IfD1qjqQ5I4k7++WfRk4N8kC8Ang1T9pvQW4FPibJE91j/P7ziRJWrlU1bRnOG2DwaCGw+G0x5CkmZJkf1UNllvnv3yWJDUMgySpYRgkSQ3DIElqGAZJUsMwSJIahkGS1DAMkqSGYZAkNQyDJKlhGCRJDcMgSWoYBklSwzBIkhqGQZLUMAySpIZhkCQ1DIMkqWEYJEkNwyBJahgGSVLDMEiSGoZBktQwDJKkhmGQJDUMgySpYRgkSQ3DIElqGAZJUsMwSJIaEwlDkm1JDiZZSLJrzPX1SR7orj+eZH7k2qe78weTXD+JeSRJK9c7DEnWAV8EbgC2Ah9KsnXJso8Az1fVpcB9wD3d524FbgYuB7YB/9B9PUnSlEziFcMVwEJVHa6qV4D7ge1L1mwH9nTPHwSuTpLu/P1V9XJVPQ0sdF9PkjQlkwjDRcAzI8dHunNj11TVCeAF4NxT/FxJ0hqamZvPSXYmGSYZHjt2bNrjSNLr1iTCcBS4eOR4c3du7Jokc8DZwHOn+LkAVNXuqhpU1WDTpk0TGFuSNM4kwvAEcFmSS5K8mcWbyXuXrNkL7Oie3wR8u6qqO39z91dLlwCXAd+dwEySpBWa6/sFqupEkluAh4F1wFeq6kCSO4BhVe0Fvgx8NckCcJzFeNCt+zrwX8AJ4GNV9T99Z5IkrVwWf3GfLYPBoIbD4bTHkKSZkmR/VQ2WWzczN58lSWvDMEiSGoZBktQwDJKkhmGQJDUMgySpYRgkSQ3DIElqGAZJUsMwSJIahkGS1DAMkqSGYZAkNQyDJKlhGCRJDcMgSWoYBklSwzBIkhqGQZLUMAySpIZhkCQ1DIMkqWEYJEkNwyBJahgGSVLDMEiSGoZBktQwDJKkhmGQJDUMgySpYRgkSY1eYUiyMcm+JIe6jxtOsm5Ht+ZQkh3dubcmeSjJj5IcSHJ3n1kkSZPR9xXDLuDRqroMeLQ7biTZCNwGXAlcAdw2EpC/q6rfA94N/GGSG3rOI0nqqW8YtgN7uud7gBvHrLke2FdVx6vqeWAfsK2qXqqq7wBU1SvAk8DmnvNIknrqG4YLqurZ7vkvgAvGrLkIeGbk+Eh37v8kOQd4H4uvOiRJUzS33IIkjwBvG3Pp1tGDqqokdboDJJkDvgZ8vqoOv8a6ncBOgC1btpzut5EknaJlw1BV15zsWpJfJrmwqp5NciHwqzHLjgJXjRxvBh4bOd4NHKqqzy0zx+5uLYPB4LQDJEk6NX3fStoL7Oie7wC+OWbNw8B1STZ0N52v686R5C7gbOCves4hSZqQvmG4G7g2ySHgmu6YJIMkXwKoquPAncAT3eOOqjqeZDOLb0dtBZ5M8lSSj/acR5LUU6pm712ZwWBQw+Fw2mNI0kxJsr+qBsut818+S5IahkGS1DAMkqSGYZAkNQyDJKlhGCRJDcMgSWoYBklSwzBIkhqGQZLUMAySpIZhkCQ1DIMkqWEYJEkNwyBJahgGSVLDMEiSGoZBktQwDJKkhmGQJDUMgySpYRgkSQ3DIElqGAZJUsMwSJIahkGS1DAMkqSGYZAkNQyDJKlhGCRJjV5hSLIxyb4kh7qPG06ybke35lCSHWOu703ygz6zSJImo+8rhl3Ao1V1GfBod9xIshG4DbgSuAK4bTQgST4AvNhzDknShPQNw3ZgT/d8D3DjmDXXA/uq6nhVPQ/sA7YBJDkL+ARwV885JEkT0jcMF1TVs93zXwAXjFlzEfDMyPGR7hzAncBngZd6ziFJmpC55RYkeQR425hLt44eVFUlqVP9xkneBbyzqj6eZP4U1u8EdgJs2bLlVL+NJOk0LRuGqrrmZNeS/DLJhVX1bJILgV+NWXYUuGrkeDPwGPAeYJDkp90c5yd5rKquYoyq2g3sBhgMBqccIEnS6en7VtJe4NW/MtoBfHPMmoeB65Js6G46Xwc8XFX/WFVvr6p54I+AH58sCpKktdM3DHcD1yY5BFzTHZNkkORLAFV1nMV7CU90jzu6c5KkM1CqZu9dmcFgUMPhcNpjSNJMSbK/qgbLrfNfPkuSGoZBktQwDJKkhmGQJDUMgySpYRgkSQ3DIElqGAZJUsMwSJIahkGS1DAMkqSGYZAkNQyDJKlhGCRJDcMgSWoYBklSwzBIkhqGQZLUMAySpIZhkCQ1DIMkqWEYJEkNwyBJahgGSVLDMEiSGqmqac9w2pIcA3427TlO03nAr6c9xBpzz28M7nl2/G5VbVpu0UyGYRYlGVbVYNpzrCX3/Mbgnl9/fCtJktQwDJKkhmFYO7unPcAUuOc3Bvf8OuM9BklSw1cMkqSGYZigJBuT7EtyqPu44STrdnRrDiXZMeb63iQ/WP2J++uz5yRvTfJQkh8lOZDk7rWd/vQk2ZbkYJKFJLvGXF+f5IHu+uNJ5keufbo7fzDJ9Ws5dx8r3XOSa5PsT/L97uN713r2lejzM+6ub0nyYpJPrtXMq6KqfEzoAdwL7Oqe7wLuGbNmI3C4+7ihe75h5PoHgH8GfjDt/az2noG3An/SrXkz8G/ADdPe00n2uQ74CfCObtb/BLYuWfOXwD91z28GHuieb+3Wrwcu6b7OumnvaZX3/G7g7d3z3weOTns/q7nfkesPAv8CfHLa++nz8BXDZG0H9nTP9wA3jllzPbCvqo5X1fPAPmAbQJKzgE8Ad63BrJOy4j1X1UtV9R2AqnoFeBLYvAYzr8QVwEJVHe5mvZ/FvY8a/W/xIHB1knTn76+ql6vqaWCh+3pnuhXvuaq+V1U/784fAN6SZP2aTL1yfX7GJLkReJrF/c40wzBZF1TVs93zXwAXjFlzEfDMyPGR7hzAncBngZdWbcLJ67tnAJKcA7wPeHQ1hpyAZfcwuqaqTgAvAOee4ueeifrsedQHgSer6uVVmnNSVrzf7pe6TwGfWYM5V93ctAeYNUkeAd425tKtowdVVUlO+U++krwLeGdVfXzp+5bTtlp7Hvn6c8DXgM9X1eGVTakzUZLLgXuA66Y9yyq7Hbivql7sXkDMNMNwmqrqmpNdS/LLJBdW1bNJLgR+NWbZUeCqkePNwGPAe4BBkp+y+HM5P8ljVXUVU7aKe37VbuBQVX1uAuOulqPAxSPHm7tz49Yc6WJ3NvDcKX7umajPnkmyGfgG8OGq+snqj9tbn/1eCdyU5F7gHOC3SX5TVV9Y/bFXwbRvcryeHsDf0t6IvXfMmo0svg+5oXs8DWxcsmae2bn53GvPLN5P+VfgTdPeyzL7nGPxpvkl/P+NycuXrPkY7Y3Jr3fPL6e9+XyY2bj53GfP53TrPzDtfazFfpesuZ0Zv/k89QFeTw8W31t9FDgEPDLyP78B8KWRdX/B4g3IBeDPx3ydWQrDivfM4m9kBfwQeKp7fHTae3qNvf4p8GMW/3Ll1u7cHcD7u+e/w+JfpCwA3wXeMfK5t3afd5Az9C+vJrln4K+B/x75uT4FnD/t/azmz3jka8x8GPyXz5Kkhn+VJElqGAZJUsMwSJIahkGS1DAMkqSGYZAkNQyDJKlhGCRJjf8FFDYZsBaypoYAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "norm_scores = [-r[0] if isinstance(r, list)  else -r for r in results_df.fun[results_df.success == True]]\n",
    "plt.scatter(norm_scores, results_df[results_df.success == True].pkx)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x7f31ff44c6a0>"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "norm_scores = [-r[0] if isinstance(r, list)  else -r for r in results_df.fun[results_df.success == True]]\n",
    "plt.scatter(norm_scores, results_df[results_df.success == True].pkx)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x7f31ff418438>"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "norm_scores = [-r[0] if isinstance(r, list)  else -r for r in results_df.fun[results_df.success == True]]\n",
    "plt.scatter(results_df[results_df.success == True].num_rotbonds, norm_scores)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x7f31ff3f2048>"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "norm_scores = [-r[0] if isinstance(r, list)  else -r for r in results_df.fun[results_df.success == True]]\n",
    "plt.scatter(results_df[results_df.success == True].num_atoms, norm_scores)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x7f31ff088978>"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAW8AAAD8CAYAAAC4uSVNAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJztnXtwHNWd77+/GY3wyBDJxuLlB2YdyhRgbINsyJpKBbi8FvD18jCvbO3u3axzK1sQsndlzC4BQSUXB1eFR+5mE4c8C0LwAxxDNiFcYHfLrhgs4xcGfBOetoDYxhYES7ZG0rl/zIw83X3O6PR0z3T3zPdTpZLmqKfnHI3m27/+nd9DlFIghBCSLFJRT4AQQoh/KN6EEJJAKN6EEJJAKN6EEJJAKN6EEJJAKN6EEJJAKN6EEJJAKN6EEJJAKN6EEJJAmqpx0gkTJqipU6dW49SEEFKXbNq0aZ9Sqt32+KqI99SpU9Hd3V2NUxNCSF0iIu/6OX5Ut4mITBeRLSVfn4jIbZVPkRBCSFBGtbyVUjsBzAIAEUkD6AHwVJXnRQghpAx+NywvAvCmUsqXeU8IISRc/Ir3DQAe1/1CRBaJSLeIdO/duzf4zAghhBixFm8RaQYwH8BK3e+VUsuVUh1KqY72dusNU0IIIRXgx/K+HMArSqk/VmsyhBBC7PAj3jfC4DIhhBBSW6zEW0TGArgYwJPVnQ4hhMSAbSuAB84Eutry37etiHpGHqySdJRSBwEcW+W5EEJI9GxbATx9K5Drzz/+eFf+MQCctTC6eblgbRNCCCnl+XuPCHeRXH9+PEZQvAkhpJSPd/sbjwiKNyGElNI6yd94RFC8CSGklIvuAjJZ51gmmx+PERRvQggp5ayFwFUPA62TAUj++1UPx2qzEqhSSVhCCEk0Zy2MnVi7oeVNCCEJhOJN6p8EJFwQ4he6TUh9k5CEC0L8Qsub1DcJSbggxC8Ub1LfJCThghC/ULxJfZOQhAtC/ELxJvVNQhIuCPELxZvUNwlJuCDEL4w2IfVPAhIuCPELLW9CCEkgFG9CCEkgFG9CCEkgFG9CCEkgFG9CCEkgtt3j20RklYi8ISKvi8jnqj0xQgghZmxDBR8C8Bul1LUi0gygpYpzIoQQMgqjireItAL4PIC/AQCl1ACAgepOixBCSDls3CanANgL4McisllEHhGRse6DRGSRiHSLSPfevXtDnyghhJAj2Ih3E4CzAfybUmo2gIMAlrgPUkotV0p1KKU62tvbQ54mIYSQUmzEezeA3UqplwqPVyEv5oQQQiJiVPFWSn0IYJeITC8MXQTgtarOihBCSFlso01uAfBYIdLkLQB/W70pEUIIGQ0r8VZKbQHQUeW5EEIIsYQZloQQkkAo3oQQkkAo3iRebFsBPHAm0NWW/75tRdQzIiSWsJMOiQ/bVgBP3wrk+vOPP96VfwywEw4hLmh5k/jw/L1HhLtIrj8/TghxQPEm8eHj3f7GCWlgKN4kPrRO8jdOSAND8SbhU+mm40V3AZmscyyTzY8TQhxww5KES5BNx+Lvn7837yppnZQXbm5WEuKB4k3Cpdymo40In7WQYk2IBXSbkHDhpiMhNYHiTcIljpuOTPwhdQjFm4RL3DYdiz74j3cBUEd88BRwEgYRGgYUbxIuZy0ErnoYaJ0MQPLfr3q4On5smw8OE39ItYjYMOCGJQmfWmw62ka10AdPqkXQzfmA0PImycTWoo6jD57UBxEbBhRvkkxsPzhx88GT+iFiw4DiTZKJ7Qenlj540lhEbBjQ502SyUV3OX3egPmDw8QfUg0izgi2Em8ReQfAnwAMARhUSrGfJYmWan1wtq1gej6xJ0LDwI/lfYFSal/VZkKIX8L+4LAZBEkQ9HkTUoQx4SRB2Iq3AvBbEdkkIouqOSFCIoMx4SRB2Ir3+UqpswFcDuAfROTz7gNEZJGIdItI9969e0OdJEkYSa0l0igx4Ul9f4gDK/FWSvUUvu8B8BSAuZpjliulOpRSHe3t7eHOkiSHJNcSaYSY8CS/P8TBqOItImNF5JjizwAuAfBqtSdGEoDOgjP5jX99e/ytvUaICadfv26wiTY5HsBTIlI8/udKqd9UdVYk/pgiM9zCUKR/f/6r9FggfsJY7zHh9OvXDaOKt1LqLQAzazAXkiRMFpykATU0+vNrWMCHlNA6qeAy0YyTRMFQQVIZJktNDXn9xn7PQapHI/j1GwSKN6kMY2TGZK/fODve3zlI9WgEv36DwNompDLK1RZx+43d/vHSY0l1MaX7U6wTD8WbVIaf2iIRF/BpWJjuX9eIUir0k3Z0dKju7u7Qz0sI8cEDZxo2JycDX2O0b9wQkU1+iv41nOW9ZnMPlj27E+/39uOktiw6L52OBbMnRj0tQsKHYYF1TUNtWK7Z3IM7ntyOnt5+KAA9vf2448ntWLO5J+qpERI+jZLu36A0lHgve3Yn+nPOGOT+3BCWPbszohnVJ2s292De0hdwypJfYd7SF3hxjAqGBdY1DeU2eb9Xn/1nGif+Kd7dFC+SxbsbAHRP1RpuFNc1DSXeJ7Vl0aMR6pPaLJNKgtIAXVrK3d1QvCOAYYF1S0O5TTovnY5sJu0Yy2bS6Lx0evVfvEGqufHuhpDa0FDivWD2RNx39QxMbMtCAExsy+K+q2fUxiJskGpupruYqtzdsC41aWAaym0C5AU8ktv3JIVtBXDvdF463eHzBqp0d8MEFNLgNJTlHSlJCdsK6N6p2d1Ng9zJ8O6CmGg4yzsyytUCiRPlRNHSoq3J3U2S7mQqhXcXpAy0vGtFUqq5JUUUk3InE4RGubsgFUHLu5bEMGzLXS7guewJaOn/wHtg3EQxKXcyQcJDk3IhJZFAy7uB0ZULuOvgNRhMj3Ee6FMUa5JhmYQ7maDhoY1wd0EqhpZ3A6NLqFk18Oc4urkJXa2rR7cWNVblmqF5tcuw1N3JxCkRKuj+QVLuLkgkULwTRNgVEU2JMz/9dC667ryn/JMNm2lb1JfRn5vrOLRmGZZx2+AL6vY4ayHw3gZg00/y7eUkDcy8KV53FyQyrN0mIpIWkc0i8kw1J0T0VKMiYqCEGoNV+aWBR7WH1yTDMm4bfEHdHttWAFt/fqShsxrKP2a4IIE/n/dXAbxerYmQ8lSjImKgcgEG6/Gk1Ef68VrUj4nbBl/Qqn5xuxiRWGEl3iIyCcAVAB6p7nSIiWrUDAmUUGOwHg9lT4iufkzcNviCbqrG7WJEYoWtz/tBAIsBHFPFuZAyVKsiYsUJNYbNtJbL78V9QzOi6VYUxw2+IOGhrZMMbcwYbUIsxFtErgSwRym1SUS+UOa4RQAWAcCUKVNCmyDJU7OaIbaUqRW9ABHV7q63+tVxvBiR2DBqA2IRuQ/AXwEYBDAGwGcAPKmU+qLpOWxAXB2so03iFC5HgmH7XvI9Tzx+GxD76h5fsLz/SSl1ZbnjKN4R4g6XA/LWWtwSWEh48D2vC/yKNzMs6w1GKNQXNlUF+Z43JL6SdJRS/wHgP6oykwCEnbySaOoxQqFRXQK2SUf1+J6TUUl8hmXDN7x1C1t2HNC/33tcUiMU4pA1GdXFwza9nlEpDUni3SbVSF5JDJrCR0OH/oQB5Yyz7lfN2DjtlmjmGJSoXQLbVgBrvuIsLrXmK7XJcrS1qIMmA5FEknjxbuiGtxphS6scPkUWu4cnYFgJdg9PwO25L+G2106NaJIBidol8OvbgeGcc2w4lx+vNrZJR0mosEhCJ/Fuk2olryQCg4C14SDOHljuGJOkXsyidgnoXFDlxsPET5x3DGvFk+qSeMs7UH2OGBCo9rVBwN5Xx3rGqnExq0nd7kZ2CdCiJmVIvOVd3JRMYrRJ4M1WjWU2mB6DB4dvcBxWvJiFGZVTs43iqLMms+P1VnZ2fG1enxY1MeArSccWJunYMW/pC1qXz8S2LNYvudDuJIaGCG6RBqBNr6+0s3socw9KLaJAtq0A1vxPYLhkUzyVBhZ8j6JKQsVvkk7iLe8kE8pmq8Yy09UWmbf0BWNUTiXiHflGcU1DCFMAhlyPCYkW/hdGSKBmCD4JW2xrOXcttQohfP5efbQJsxdJxFC8I6SWm61hi23kG8W1CiGMOlSREAMU7wgJ1AzBJ2GLbS3nrq3vUavGC3Fr8EBIAW5YNhCxqwFjs+Foqpg386Z8P8dqV9JjxT5SI7hhSYxU3DWnGthuOJp827//LTbOuAeTX1mG49Q+7JEJ2DWjE3PCFtSAoYqxu2CSuoGWN6kJbhF7Tr6Clv4PvAe2Tga+9uqRx11tALz/owqC04d+EVroYzVwx8IDJXNMr2/MSonECC3vBiMJlp0uoWfMUR8CojnYvRFoSI//IyaEGvpYDUxF07b8ajkWyPejrZRIEg83LBNMURR7evuhcCTLsSpp6gHQiZguhR9AvqRt6ebkqZdo0+PvG7hO+/Q4FSQzzeVLA4+yeQIJDMU7wURdDte2tolOxO4fXIg+1ewcTGWAgU+d5Ve3/jy/Oemq79H9mYsxP7UO65pvxVtH3YR1zbdifmpdrAqSGcMzUx/pn8DwQ+IDuk0STJRZjn5qm+gqP64dPh/jM83oGrv6iN934KC3jkhhc9LhBwfw4Dvfx5mbHkFWBgAAk2QfvpV5BK+ePhVAjdLzR6Hz0ulan/eh7AkGfz/DD4k9tLwTTJRZjn6sflOM+awrFuVFuas3/73/gP7FNBbpnDe/MyLcI+eUAcx58zs+V1I9TLHwLZff27iVEklo0PJOMCbLrhZZjn6sfuvKj35qdyck81EfnhlxpURSF4wq3iIyBsB/ATiqcPwqpdTd1Z4YGZ0oy+H6bYJhFWPup/lA1E0agsJSryQgNpb3YQAXKqU+FZEMgHUi8mul1IYqz41YEFXiTShWvy7D8qqH7SxSP0Jv+9oUU5IgRhVvlc/i+bTwMFP4Cj+zhySKwFZ/sbFvsWJfsbHvgu96Nie1BMl8LJPdqauFHpe48RF44SGwzLAUkTSATQA+C+BflVJlu68yw5KMyrdOMXeouf3tys9rI2wPnKl1ufRlT8Q5nz4Yr6xN93pOvaQ2NV1IzfGbYWkVbaKUGlJKzQIwCcBcETlT88KLRKRbRLr37t1rP2MSLbqKfbWgXGPfSudTtKhL48SfvtV7DsOm5pj+DyONm/egW0/3j5jgQwD4DBVUSvUCeBHAZZrfLVdKdSilOtrb28OaH6kmtmJXayqdj22DBlPj5mF91mdkWZu69Zg8ljGLsiHVZ1TxFpF2EWkr/JwFcDGAN6o9MVIDatWNRodY2g1+5mMbPmjoSP9I8xe1T48sa9OPICclyoaEhs0n6EQAL4rINgAbATynlHqmutMiNSHKWGk1bH+s7XxsGyectTDvI3al3M+6YlG03YHcGAXZVdGLCT4NiU20yTYAs2swF1JrooyVbp2sf23tsZbz8RM+aGjcDEQTN6/FtJ6ZN+VLBjDapKFhhmUD4S4f++Dpt2DO9rsrj5UOgk6Y0s2AUs6Gv37mE7BxAhCzhhUhrIfUL2zG0CCYGgP8bM67+XogpeIA1EYwdGF9tXptQmKG31BBineDMG/pC9p09oltWaxfUlKFjz0bCYmEqsR5k+RjXUgqygiUeiSqOHpS99S1zzsJLcJqhXUhqYRU6zOiccVElvJu22SZkAqoW8vb1CJs49rvN6QlZKqp7Q6D68ueoH2+aVyHbYed0NEkHQ3+8hase+q70bSK410MqSJ1a3nrmgVcPPSfOPOVHyJfKBENZQnZFpK6P3c9FqvvoqWk0UGfasb9uevR5Tqn7s4GADpXbkVuOL+X0tPbj86VWx1zCAtvR/q70OISy6ahQ7gNv8Aq/PnIWM0aFSf9LobEmroVb52Pd3HTCmSLwl2kaAlFJN61dO3YhMH99NO52J8awOKmFThJPsL76ljcP7gQTx+e6xBvUxs0gRoR7iK5YYWutTtCXZefjvQnibdnZOCUd5sCWEmvOU5iTd2Kt87He5Ls0x8ckSXkpw+k3/NWekE4qS2Ltb3nY+3A+Y7xiS7fuKkNmone/pzxd6OiEcplz07QdqSfpHmPdZ3qA6W82/qyg9YcJ6QMdevz1vl4P8AE/cE1soTcvuB7nt4RehU7k6/f1sdr6xuvWbEmQ/Gsjk+e8xyq60g/mB6DB3GDYyxwyrutL9uQhl/vLjpSG+rW8tb5eN8/fTEm1iij0G39XnBaO1Zv6nFY2SaCCGO5xsA21veC2RPR/e5+PP7SLgwphbQIrjnH624xRa+I5JMk3YxryfhbSBGDUN7RvBK/POS8O9B1pG+66C6cPzQPvwvTNeXHl812Z6RK1K14Azof74XA1HFVz+DTuUMe2/CedfuhILf0fhoD61izuQerN/VgqKDAQ0ph9aYedJw83vG3NLVBu+aciXhi4y7kho6sNpMW3H3VGd4Xs/EbG4TyeOxDNpP2vP6sKxYBs+9xHLsAIW+W0pdNYkDduk2MnLUw32arqzf/vQpWkc76tRXuoLf0JuG3vSCUs9xLWTB7Iu67egYmtmUhyPvE77t6Br6xYAaWXTvTMb7s2ple8bStJW4QRGmdpH39msRvG0rK0pdNakldW95BCLLp58ft0ZJJ4fCgKuui8EPQxsB+LPdARZzK+Y0tN/0WnBVRESkWjCIxgOKtwW8UiFvo21oyONDnja4QOC3wTFqQG1Kjuij8ELQxsHUmpgHrv52t3ziuQklfNokYircGP5t+OrHKpGREmIsU/cEvvrF3RFQPHh70hND5TSC5c812x+bijedOxjcWVO4+6Lx0OtY99V3chl/gJNmH99UEPIgbcP6lX7F6vu3fri97Alr6P/A8vy97AlrcgzUUSpZUIEmB4q3Bj+tAJ1a5YYVsJoXhYTjcId9YMMNx3ClLfmV8HRsRuXPNdjy64b2Rx0NKjTx2v5YtC9LrcWXmETQNHQIATJJ9WJp+BE3pmQBGF1Dbv52fTM5aUa24e0KqQeNtWFrgZ9PPJFb9uWGPO8Qda216nbaWjFWs9uMv6TvRmMatao48f++IcBdpGjqEvl/fZVWvxPZv99NP52JJ7kvYPTwBw0qwe3gCluS+hJ9+Olf7fFuC1FWx3awlJA7Q8tbgZ9PP5CN2058bQtfaHWVjv4uvo5Q3W1Hnehgy1GIfUgrzlr7gqTkSxBc9pu9D9BzuH3lu5yp9vZLOS6ejc9VWT6ig+29nm8nph6CWc9AwS0JqCS1vDaYwOJ0A6DISTfT25xzW9OpNPZg0bozjmLOntOJjQyq5W0RSmjoeRdxWe9dafTZn19odDkvVVD3QnWKeG1K45+kd+hd3X1M01xjbTM5ybFz7fXzY9VkM392KD7s+i5d++b1AlnPQMEtCasmolreITAbwMwDHI/8xXK6UeqjaE4sa2zA4XXRH38CgNtrETX9uCL/fc9Axtv7N/cikgJymuXpr1pmleFRTCv26AzWvY6o70tufG9k07entx780XY1vpn/g9UUPev3dujUue3antjCV+64haFTMxrXfx5mb7kRWBgABTsBefF19DwdTg1g77LTmbS3noGGWhNSSUdugiciJAE5USr0iIscA2ARggVLqNdNzGr0Nmq5fZBi0ZFIYN/aoEbGzcddUwvzUOk9VQbcgFpnYlnWI79ee2KJNSBIAby+9IrQ5ftj1WZyAvZ7x3cMTcP7Aw545Olq9lYHRJiQq/LZBG9XyVkp9AOCDws9/EpHXAUwEYBTvesbmw62zKnv7BnBwIJiY9+WG0dd7xO/sjhsvx7iWDA7lhq0uKGuHvb5oEz0l87njye1ozWa0FQTDdj0cp/ZalX/1aznHqns8IWXwtWEpIlMBzAbwUjUmE3f8bIi5ReD0r/869PkoaBJ/UgIIPDHmxdoilbh3bOnPDWFMJuWJcddtWAZlj7RrLe8P5VjP3QDFmNQj1uItIkcDWA3gNqXUJ5rfLwKwCACmTJkS2gRrgakjjHssSMW+PgvfdCmZlHh8xzoUvK4L3dyL8yudp869k04JhjSv23nCFlzT+2Mcp/Zij7Tjfw9cp3WlHOjL5S8g7kmGzK6zO9Fa9HkX6FfN6DlnMdbPt3OREJJkrMRbRDLIC/djSqkndccopZYDWA7kfd6hzbDK6KzpzpVbHdZr0cI2uRzC9j2LQOsS0KHz59rGNuvcO7qsz/mpdfgfvT/MdyEqbA4uzTwC5KAVcJsNy6DMmf9lbAQw+ZVlOE7twx6ZgF3ndGLO/C+H9hqExBmbaBMB8EMAryulvl39KdUWU4akm3K+4rSMrrRtBl+wjmxTSmupu10kOn+u31hnt3tHl/Wpax/XIvlWaba+8WrESs+Z/2WgINYnFL4IaRRsLO95AP4KwHYR2VIY+2el1L9Xb1q1IwxR0SXLuF0xV848EU+8vMtxYcikBHNPGYcNbx1w1CZ5rCTlvRSdi8QtyH5dO+556jYcTe3jdL0h0yLav4efwlaM9iBkdGyiTdbB+iY+efgJuTMJ098c/TLwwO0jVe82TrsFd2w82WH9rt7Ug+vnTnYUpipaze981I/3e/txQusYdJw8Hi++sVc7J5uQNz9ZgtqiWmnx+Ns/wARMhFfAP4AzcSeTElw/d7I2a9Rmw5K1RQixp+EzLHWZfsWqgKVkM2nceO5kz/hfNq3Hnep7jqYCZ77ydVw89J+O4/pzQ3jxjb1Yv+RCvL30ihER1tUwmXqs3kq94LR2z5i7lkebod2YzvLVuoyGFI4e0+TILj009b95nqsAPD80yzE2pBQ6Th5fcZMEv7VFgtQxISTpNHxtE1Omn2nsiZedRZ/+Kf2Ep5BTFoe1/mC39WsSqw1vHdDO9cU3nKFxazb3oHPl1hEruae3Hynk0+ZL3faZlD5Uz2Sl9/blsPmuS44MPHCr5xgBcGFqC0p7xwwroGvtDmy5+5KKLOWgdw200kkj0fDiDZgTM9xj85a+4NnMPFHjTgD0/mC39WsSK1PBKffxXWt3eOYzDHhD8wxOL1NCjTsN31SsSrdG201Z7fl8NIII2miZkKRTF+JdjU0u3Tl1Yvu+moBJmg09tz9Y5/c1ddxxW85F3CJmK5S5oUKoXnq9oyPN5eov8TjO8xzvCZ4xNNx1F6sqUun74ae2CCsAkkYn8T7v4u3zaLWvwzinxyIFcP/gQvTjKOdgJov3z1k8qt/XVFbmqKZU4Ip7bjo+ec7T8Pfr6nuYn1rnOfZAX87hS9447RZPw91+6ItVjW1OV/x++KnmyAqApNEZtTBVJdSyMNW8pS9UHJnh95y6+iDZTBo/m/Mu5rz5Hd89FqcaOukAwIPXzxrVep1972+t09s3jPmqdSEnXTy5e40bp92Cm16a7EmDH9vcpL0jCPJ+6NBlh2Yz6dp1kCckZEIvTBV3qnH7XG4j7wGNqM6ZfRkA/5l9Inrr25Tz4+5Xed6fjcPL7xxwCGhK8inu7tomx1v65nXFrvpzQ/jVtvcxZ+yRsTlTx2HZ5Jmev8XXntgCHWG7M4KWlCUk6SRevIN2OwfsElX8ntMG002PUt6uN/+4YovDDz6kFNa/uR/zpo0fiRMvCtjK7vew/s39I8eePaUV8qneb/1x83FID8jIBUG3WTo/tQ6Lc48AHxfqiHy8C3j6Viy46mEsWOK8w1j27M7A74ctrABIGpnE+7yDdmQphtuV+mg/OeQtrpTNpHHBae2h+9dNuCMpTDWqNrx1wBE73v3ufodwA/kGDyta/9bjtx5Mj8E3D1/n6LWpM/oXN61wNGcAAOT685ufLsLokEMIGZ3EW95+b5/dVvb+g4e94XYKGNMkOO4zY6yqCnau3ILbStwF86aNx2N//7mQV6rHbSmbUutv/3+nYeFNDzuiTb5x8BqsGnA2/NVdI0zp8boQQrozCKkNiRdvwHz77BbqC05rxxMbdzmqBZroyw3jNdcGm8mf664htf7N/bj5B78bVcDH+QwV1OEuimV6mgLym6glG6k/LbNhWoopHBKtk7TH051BSPVJvNsE0KdJ68L9Ht3wnmMjrxzzU+uAB84Eutry37et8OW3dbsudNx91RmedPtMWtB+dLP169x47mTrY93Yruf+wYXoU645ZbL5qBpCSCQk3vI2pUnnm/NW1nZsfmpdvl61a4Puqyd2YnHvaWFN3ehiuM1g4QNHimMVKxB2nDwe85a+MPL8o5pSODzoLSc7tjmtvRNxF5HSsXb4fCAHPNz+tO9wyFrDqoSkUajbOO8grGu+FZNSXjfBh2jHeYcesj7POxU23C0X/116Tl2scyaVF/dSt0s6JbjRUO3vmnMmOiodtjSnPB3tAeDU48aib2C4on2FWgkoY79JkmGcdwiYNuiOU4aNOw3HH9PssIirIWCmRhLZTAoDg+qIhV4oRavbbC1WOizl5h/8zuH2OfW4sdh94JBVEagoC0ax3glpJBIv3qY4b102pM4qTUneFWFTv/p96Gt56Njzp4GRzUO/AjZv2nitz3zetPGOx6Y7jv6SHdQhpTxNIErRXfzcG63zlr5gLYpRCijrnZBGIvEblqa44ruvOsNTJ2PZdTPx7YWzHGPfXjgLy66b6Rj7P3KTZ4OuTzXj/py9j1eXpWiqS+3msb//nEeodeGHNu3XgLw1bjrSZtPSjyhGKaCsd0IaiVhb3ja+03JxxbrkGZvyr1OX9ONgahCLm1bgJPkI76tjcf/gQm2zXT/4ETCbOHFT6VgdCvmLWiUdbvxksYaR8VopfqoSEpJ0YivefnynOkEO4ntNi2Dt8PnWzXVtCZKyr7twTfTRwg0A7rt6RtVLtUYpoEwQIo1EbKJN3GLVNzCoTWAZ15JBS3PTqF1vTDU2bKrblYv2qBRTs+FvLJjhOdY2asLdSacc41oyzu44JeewETt3USzT3P2ckxByhNCjTUTkRwCuBLBHKXVmkMmZ0FnJJg705UZEvae3H50rtwICR9akW/hKMbXUKhWbcrib89pSLCRV+vjRQiq7WwR9bfq5nNnplEC5NmUzacHdV53hmZPt3cmazT1YvanHUQNl9aYedJw83uiColgTUl1sNix/AuCyak5CJ1a25IaVJ2uyPzdk3KBrbko5sjHvXLPdk4lZFs2J56fWYV3zrXjrqJuwrvlWbYMDk94//pKmQ40CF/ahAAAMyElEQVTlpt+yZ3d61j40rNCazTg3aq+dqRVT24a/fhsDE0Kqz6iWt1Lqv0RkajUnEXaSDWCu8XF4cHjk9Xp6+/HYhveMx+pwi2UxG7NYdW+S7MtnZ+ZgtcGp23Q0bfq1ZjOO2HHT3+1AXw4tzaNvZ9heJBiCR0j8iMWGpamOdC0I+qq6cqktMqDtHm+LbtMvkxIcHBgcqTPe09uvbZxQpPQC1blq68h4qXvI1EPT7TqyblRMCKkZoYm3iCwCsAgApkyZ4uu5UQl3GJiyMXWd1W3RRU3oNnAV9J1v3OSGFP75yW1QEId/2+Qzu+C0dsdjUzi5ZZg5IaQKhCbeSqnlAJYD+WgTP8/1E/J26nFj8dbevrKdX/xiI4AmTOVSTZ3V3bQZrFf3pt8phggYhfzfbzRXSp+7bi0A70ieF99w9rrsNfTJNI0TQqpPLDIsTVmS86aNH8kiTItg3rTx2H3g0KidX4C8oH3xvCme5+te5+bzpjg2+PygK5fap/Sd1XXYWq+mKJhxLeG7Lty+bGYuEhI/bEIFHwfwBQATRGQ3gLuVUj8McxK2yRW6Ghs610ExKWTB7ImeMDybGORpd/y7tUVfLJdaaTamrfWq9YOnBZ8eGnSETpowNTvW4RZlZi4SEj9sok1urMVEbDBFN7hdB+WSQmxikG88d/JIDHYpLZmU1v3wtCsbM5MSZNLeyBQdbZaW84LZE9H97n5HokxTShxFqExkUoLrNSVhMylxxMgDelFm5iIh8SMW0Sa2ySImn65N1mTpa7lFCPAKEwBPRmHHyeO1Fqi7JrbunAcOHtYKv601rEuU6c+Zn6y7mHWcPN5q7Uy8IST+xCI93tRQwS3Kfovta3tYusqjpgCk0+KxPm3PaWuBnrLkV9pNUQHwtkXTBj9NJ0yp8I0K0/VJEvCbHh+LDUuTKLnHF8ye6CnzWk5kO1du9fawdHeKh9e9UY3swaCbfn4SmRIceRk6ul6mdzy5XVtxkpAkEQu3iSnkT1ev2lRB0G1Zda3dUVENkiKmGiiVViq84LR2rR/dHVNtwk9H+Y81CTVRE5X1y+46pF6JheVtiuywifgwWVa6jEA/6CziIDU+ntn6ga9xN36uQ3EL4YvS+mVqP6lXYiHeptjqcS0ZRxEp3YfdJKhByKRFGwYXRAhMF5OgFxk3cQzhi7KwFWPUSb0SC/HWJekUY5hHs9aCWlDplHj/CAYrt1pCMNoFCjBnYmYzKas9gCiJ0vo1JYDF7QJHiF9iId66jcixzU0en7XOWjMJZ1s2g0za6TPPpAVfdGVTHnNUkydNPDestFZhECEolwlp407omn9GPi67dD0pwX1Xn4X1Sy7E20uvwPolF8ZOuIForV8/m9xA3sVjczElJGpiESqowza0rlz4IDB6DLPfEL5KN97WbO5B56qtVok7prj1pIa8+QnxjHKNfkNRCQmT0DvpRIVtI9vRsv9G+9D5bZhbabKKbp62IZJBXztqbDM0g0TzhAEjU0iSiK14+6mnEUTUoqzbYapmqAuRTDo271HU4snIFJIkYivetaqnUavXcbtNyiXdDCllncZfTxZh1OLp9y6MkCiJrc+7WkTlU51972+1XWt0tGUzODw4bFVEqp78sbZlEqoFfd4kShKZHl8rokwWsRXubCYNEW+suqnRcj01AY46rM9vZAohURJbt0k18ONTraWF7q4A+LUntlg/t6e339GUOIx5RnV3EofSs0ndFCaNR12It63Y2PpU/UY92Lx+m6GJb1s243EJLHt2p69CVKXNhoNGZ0Qd8UHxJMSOWLtNbBImyrlC3M83dTt3b0j5See2dcWYkmy65p/hOafOfWBLUFdKlKnshBB7Ymt5myzA7nf3OxofHDw8qBWbrrU7HJt+Pb39yKQFmZQ4Mjd1PlU/8de2rhg/LgFd1xw/jZaDRGdEHfFBCLEjtuJtEsXHNrw3EhtdzrWgc1HkhhTGtWTQ0txUVkD9lKj1I3a2LgFd1xw/He6DhLYxXI6QZBBb8S7XrzIIvX05T5cZt8/aT4lak9i1FSoiVhKnrbtw6Rot2/ag9AObDROSDKzEW0QuA/AQgDSAR5RSS8OeiFtA21oy1uF1Okzd0t0WpM49Y7JydaVrOy+d7qlZkk55u7p3rtzqENpyG4F+Gi0D4UZnxCHigxAyOqOKt4ikAfwrgIsB7AawUUTWKqVeC2sSuuzDlOSrAJaKoh/XgVLe4wX5zjWlFnHfgNdnrnuNlMBsfbqeMDSs4K4oruvqYwpT9NNoWbeJe+ea7Z7myd9YMEM/dw2M+CAk/thEm8wF8Ael1FtKqQEAvwDw38OcxD1P7/AkoAyrvFugNGHi5vOmeKIwTFVAMimvCCsAj254zxEZYmvdDyug+939nvFlz+4Mvd2abbKKLtLlH5/Ygkc3vOfwlz+64T3cuWZ7xXMkhMQPG7fJRAC7Sh7vBnBumJMwCWhfbhivuSzNjpPHezrCr97U4/HRBu2mo+Pxl3Z5LNigURi6jUBb14XON+6uTV5EN3dCSHIJbcNSRBYBWAQAU6ZMCeu0HnS39G5B77x0Om7zkaVoi58Ny6CbizauCz8XDj+hhoSQ+GPjNukBMLnk8aTCmAOl1HKlVIdSqqO93a4jehFTiy/TuJsFsycG6ibTls043DOmiqy6UEGTi+NmV8eeZdfNxLJrZ4ZaN8NP+F49lpklpJGxsbw3AjhVRE5BXrRvAHBTmJPomn8GOldudfiOTdmHtsybNh7r3/T6qN1kM2l0zT/DIaJ3rtmORze85zn2xnMne8b8RmeEuRGoC+tLQe860c2dEJJcrErCishfAHgQ+VDBHymlvlnu+EpKwlajGNLNP/idQ8DnTRuP6zqmWL1O0IiNWqH7u7mzM+M6d0LIEfyWhG24et6EEBJHWM+bEEIaAIo3IYQkEIo3IYQkEIo3IYQkEIo3IYQkkKpEm4jIXgDvhnjKCQD2hXi+qOF64k+9rYnriTcTAIxVSllnOFZFvMNGRLr9hNDEHa4n/tTbmrieeFPJeug2IYSQBELxJoSQBJIU8V4e9QRChuuJP/W2Jq4n3vheTyJ83oQQQpwkxfImhBBSQuzEW0R+JCJ7ROTVkrHxIvKciPy+8H1clHP0g4hMFpEXReQ1EdkhIl8tjCdyTSIyRkReFpGthfXcUxg/RUReEpE/iMgTItIc9Vz9ICJpEdksIs8UHid2PSLyjohsF5EtItJdGEvk/xsAiEibiKwSkTdE5HUR+VzC1zO98N4Uvz4Rkdv8ril24g3gJwAuc40tAfC8UupUAM8XHieFQQD/Syl1OoDzAPyDiJyO5K7pMIALlVIzAcwCcJmInAfgWwAeUEp9FsABAH8X4Rwr4asAXi95nPT1XKCUmlUSfpbU/zcAeAjAb5RSpwGYifz7lNj1KKV2Ft6bWQDOAdAH4Cn4XZNSKnZfAKYCeLXk8U4AJxZ+PhHAzqjnGGBtvwRwcT2sCUALgFeQ72m6D0BTYfxzAJ6Nen4+1jGp8GG5EMAzyHexS/J63gEwwTWWyP83AK0A3kZhfy7p69Gs7xIA6ytZUxwtbx3HK6U+KPz8IYDjo5xMpYjIVACzAbyEBK+p4GLYAmAPgOcAvAmgVyk1WDhkN/KNq5PCgwAW40gTomOR7PUoAL8VkU2F3rJAcv/fTgGwF8CPC26tR0RkLJK7Hjc3AHi88LOvNSVFvEdQ+ctS4kJkRORoAKsB3KaU+qT0d0lbk1JqSOVv+SYBmAvgtIinVDEiciWAPUqpTVHPJUTOV0qdDeBy5N10ny/9ZcL+35oAnA3g35RSswEchMudkLD1jFDYR5kPYKX7dzZrSop4/1FETgSAwvc9Ec/HFyKSQV64H1NKPVkYTvSaAEAp1QvgReTdCm0iUuyJqm1SHVPmAZgvIu8A+AXyrpOHkNz1QCnVU/i+B3lf6lwk9/9tN4DdSqmXCo9XIS/mSV1PKZcDeEUp9cfCY19rSop4rwXw14Wf/xp5v3EiEBEB8EMAryulvl3yq0SuSUTaRaSt8HMWef/968iL+LWFwxKzHqXUHUqpSUqpqcjfwr6glLoZCV2PiIwVkWOKPyPvU30VCf1/U0p9CGCXiEwvDF0E4DUkdD0ubsQRlwngd01RO+w1DvzHAXwAIIf8VffvkPdBPg/g9wD+L4DxUc/Tx3rOR/72ZxuALYWvv0jqmgCcBWBzYT2vArirMP5nAF4G8AfkbwOPinquFaztCwCeSfJ6CvPeWvjaAeBfCuOJ/H8rzH0WgO7C/9waAOOSvJ7CmsYC+AhAa8mYrzUxw5IQQhJIUtwmhBBCSqB4E0JIAqF4E0JIAqF4E0JIAqF4E0JIAqF4E0JIAqF4E0JIAqF4E0JIAvn/sR/MenW+wzgAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "norm_scores = [-r[0] if isinstance(r, list)  else -r for r in results_df.fun[results_df.success == True]]\n",
    "plt.scatter(results_df[results_df.success == True].num_atoms, results_df[results_df.success == True].rmsd)\n",
    "plt.scatter(results_df[results_df.success == False].num_atoms, results_df[results_df.success == False].rmsd)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x7f31ff0fb2e8>"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(results_df[results_df.success == True].num_rotbonds, results_df[results_df.success == True].rmsd)\n",
    "plt.scatter(results_df[results_df.success == False].num_rotbonds, results_df[results_df.success == False].rmsd)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7f31ff010208>]"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "norm_scores = [-r[0] if isinstance(r, list)  else -r for r in results_df.fun[results_df.success == True]]\n",
    "plt.scatter(norm_scores, results_df[results_df.success == True].score_real_mol)\n",
    "plt.plot([0,300], [0,300], '-r')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>x</th>\n",
       "      <th>fun</th>\n",
       "      <th>nfev</th>\n",
       "      <th>nit</th>\n",
       "      <th>message</th>\n",
       "      <th>success</th>\n",
       "      <th>jac</th>\n",
       "      <th>rmsd</th>\n",
       "      <th>pdb_id</th>\n",
       "      <th>score_real_mol</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>0</td>\n",
       "      <td>[1.3748057943281191, -0.4826028014294825, 2.13...</td>\n",
       "      <td>[-364.806770723242]</td>\n",
       "      <td>7362</td>\n",
       "      <td>56</td>\n",
       "      <td>Optimization terminated successfully.</td>\n",
       "      <td>True</td>\n",
       "      <td>[-0.0021884716261411086, -0.001716671249596402...</td>\n",
       "      <td>1.062297</td>\n",
       "      <td>3wf6</td>\n",
       "      <td>627.400509</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1</td>\n",
       "      <td>[3.141592653589793, -1.4331719131845528, -2.52...</td>\n",
       "      <td>[-493.99769349980284]</td>\n",
       "      <td>117589</td>\n",
       "      <td>500</td>\n",
       "      <td>Maximum number of iterations has been exceeded.</td>\n",
       "      <td>False</td>\n",
       "      <td>[-0.6910909178259317, 0.0010231815394945443, -...</td>\n",
       "      <td>3.542217</td>\n",
       "      <td>4b9z</td>\n",
       "      <td>782.277607</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2</td>\n",
       "      <td>[-2.109265052871724, 0.3173394855975662, -2.09...</td>\n",
       "      <td>[-1162.5185396000136]</td>\n",
       "      <td>240454</td>\n",
       "      <td>500</td>\n",
       "      <td>Maximum number of iterations has been exceeded.</td>\n",
       "      <td>False</td>\n",
       "      <td>[31.426748137164395, 24.671612663951237, -32.6...</td>\n",
       "      <td>3.126936</td>\n",
       "      <td>1m0b</td>\n",
       "      <td>1604.583213</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>3</td>\n",
       "      <td>[-0.15389043897876434, -3.020332654441904, 1.7...</td>\n",
       "      <td>[-74.78615502978923]</td>\n",
       "      <td>3666</td>\n",
       "      <td>33</td>\n",
       "      <td>Optimization terminated successfully.</td>\n",
       "      <td>True</td>\n",
       "      <td>[-0.00011368683772161603, 1.1368683772161603e-...</td>\n",
       "      <td>0.053483</td>\n",
       "      <td>2rk7</td>\n",
       "      <td>60.809820</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>[-0.8998916306504124, -0.8213899634576136, -0....</td>\n",
       "      <td>[-422.6319121543464]</td>\n",
       "      <td>34527</td>\n",
       "      <td>135</td>\n",
       "      <td>Optimization terminated successfully.</td>\n",
       "      <td>True</td>\n",
       "      <td>[-0.0023362645151792094, 0.01262492332898546, ...</td>\n",
       "      <td>4.171069</td>\n",
       "      <td>4wkp</td>\n",
       "      <td>273.228510</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                   x                    fun  \\\n",
       "0  [1.3748057943281191, -0.4826028014294825, 2.13...    [-364.806770723242]   \n",
       "1  [3.141592653589793, -1.4331719131845528, -2.52...  [-493.99769349980284]   \n",
       "2  [-2.109265052871724, 0.3173394855975662, -2.09...  [-1162.5185396000136]   \n",
       "3  [-0.15389043897876434, -3.020332654441904, 1.7...   [-74.78615502978923]   \n",
       "4  [-0.8998916306504124, -0.8213899634576136, -0....   [-422.6319121543464]   \n",
       "\n",
       "     nfev  nit                                          message  success  \\\n",
       "0    7362   56            Optimization terminated successfully.     True   \n",
       "1  117589  500  Maximum number of iterations has been exceeded.    False   \n",
       "2  240454  500  Maximum number of iterations has been exceeded.    False   \n",
       "3    3666   33            Optimization terminated successfully.     True   \n",
       "4   34527  135            Optimization terminated successfully.     True   \n",
       "\n",
       "                                                 jac      rmsd pdb_id  \\\n",
       "0  [-0.0021884716261411086, -0.001716671249596402...  1.062297   3wf6   \n",
       "1  [-0.6910909178259317, 0.0010231815394945443, -...  3.542217   4b9z   \n",
       "2  [31.426748137164395, 24.671612663951237, -32.6...  3.126936   1m0b   \n",
       "3  [-0.00011368683772161603, 1.1368683772161603e-...  0.053483   2rk7   \n",
       "4  [-0.0023362645151792094, 0.01262492332898546, ...  4.171069   4wkp   \n",
       "\n",
       "   score_real_mol  \n",
       "0      627.400509  \n",
       "1      782.277607  \n",
       "2     1604.583213  \n",
       "3       60.809820  \n",
       "4      273.228510  "
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d = torch.load('DockingResults_TestSet.chk')\n",
    "reults_df = pd.DataFrame.from_dict(d)\n",
    "reults_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#%%time\n",
    "#loader = DataLoader(db_complex_train[5:1000], batch_size=1, shuffle=False)\n",
    "#data =  next(iter(loader))\n",
    "\n",
    "pdb_id = data[3][0]\n",
    "real_mol = Chem.MolFromMol2File('data/pdbbind_v2019_other_refined/' + pdb_id + '/' + pdb_id +'_ligand.mol2')\n",
    "mol = Chem.MolFromSmiles(Chem.MolToSmiles(Chem.MolFromMol2File('data/pdbbind_v2019_other_refined/' + pdb_id + '/' + pdb_id +'_ligand.mol2')))\n",
    "Chem.rdchem.Mol.Compute2DCoords(mol)\n",
    "Chem.rdMolTransforms.CanonicalizeConformer(mol.GetConformer())\n",
    "mol = Chem.AddHs(mol)\n",
    "AllChem.EmbedMolecule(mol, randomSeed=123)\n",
    "AllChem.MMFFOptimizeMolecule(mol)\n",
    "mol = Chem.RemoveHs(mol)\n",
    "\n",
    "\n",
    "opt = optimze_conformation(mol=mol, target_coords=torch.tensor([0]), n_particles=1, pi=torch.tensor([0]), mu=torch.tensor([0]), sigma=torch.tensor([0]))\n",
    "\n",
    "\n",
    "opt_mol = copy.copy(mol)\n",
    "values = t['x']\n",
    "        \n",
    "# aplply rotations\n",
    "[opt.SetDihedral(opt_mol.GetConformer(), opt.rotable_bonds[r], values[6+r]) for r in range(len(opt.rotable_bonds))]\n",
    "        \n",
    "# aplply transformation matrix\n",
    "rdMolTransforms.TransformConformer(opt_mol.GetConformer(), opt.GetTransformationMatrix(values[:6]))\n",
    "opt_mol\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import py3Dmol\n",
    "p = py3Dmol.view(width=400,height=400)\n",
    "p.addModel(Chem.MolToMolBlock(opt_mol),'sdf')\n",
    "p.addModel(Chem.MolToMolBlock(real_mol),'sdf')\n",
    "p.setStyle({'stick':{}})\n",
    "p.zoomTo()\n",
    "\n",
    "p.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:python36]",
   "language": "python",
   "name": "conda-env-python36-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
